package com.nageoffer.jobtrain.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nageoffer.jobtrain.admin.dao.entity.ContestDO;
import com.nageoffer.jobtrain.admin.dto.req.*;
import com.nageoffer.jobtrain.admin.dto.resp.ContestAddOjQuestionRespDTO;
import com.nageoffer.jobtrain.admin.dto.resp.ContestEditRespDTO;
import com.nageoffer.jobtrain.admin.dto.resp.ContestPageRespDTO;

/**
 * 竞赛管理接口层
 * author：唐晨
 */
public interface ContestService extends IService<ContestDO> {
    /**
     * 竞赛分页查询
     *
     * @param requestParam 分页查询请求参数
     * @return 竞赛分页返回列表
     */
    IPage<ContestPageRespDTO> contestPageList(ContestPageReqDTO requestParam);

    /**
     * 新增竞赛基本信息
     *
     * @param requestParam 竞赛基本信息入参
     * @return 竞赛ID
     */
    ContestAddOjQuestionRespDTO addContestBaseInfo(ContestAddBaseInfoReqDTO requestParam);

    /**
     * 编辑竞赛
     *
     * @param requestParam 竞赛ID入参
     * @return 竞赛详情响应
     */
    ContestEditRespDTO editContest(ContestEditReqDTO requestParam);

    /**
     * 修改竞赛详情
     *
     * @param requestParam 竞赛修改详情入参
     */
    void updateContest(ContestUpdateReqDTO requestParam);

    /**
     * 删除竞赛详情
     *
     * @param requestParam 删除竞赛详情请求入参
     */
    void deleteContest(ContestDeleteReqDTO requestParam);

    /**
     * 分布竞赛
     *
     * @param requestParam 发布竞赛请求入参
     */
    void publishContest(ContestPublishReqDTO requestParam);

    /**
     * 撤销发布竞赛
     *
     * @param requestParam 撤销分布竞赛请求入参
     */
    void revokePublishContest(ContestRevokePublishReqDTO requestParam);
}
